﻿Option Explicit On
Option Strict On

Namespace VSProject.MicroORM

#Region "       SQLAttributes.vb - Атрибуты       "

    ''' <summary>Перечисление поддерживаемых типов для переопределения типа столбца</summary>
    Public Enum StorageClass
        Auto
        Text
        Integral
        Fractional
        DateTime
        Bool
    End Enum

    ''' <summary>Атрибут применяется для классов для указания названия таблицы</summary>
    <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
    Public Class TableAttribute
        Inherits Attribute
        Public Property Name As String = String.Empty

        Protected Sub New()
        End Sub

        Public Sub New(Name As String)
            Me.Name = Name
        End Sub
    End Class

    ''' <summary>Атрибут применяется к свойству, которое будет столбцом содержащий первичный ключ</summary>
    <AttributeUsage(AttributeTargets.Property)>
    Public Class PrimaryKeyAttribute
        Inherits Attribute
    End Class

    '''<summary>Атрибут применяется к свойствам, которые не будет участвовать в операциях вставки</summary>
    <AttributeUsage(AttributeTargets.Property)>
    Public Class ProgrammableAttribute
        Inherits Attribute
    End Class

    '''<summary>Атрибут применяется к свойствам, которые поддерживают автоинкремент. Они не будут участвовать в операциях вставки, если их значение равно 0</summary>
    <AttributeUsage(AttributeTargets.Property)>
    Public Class AutoincrementAttribute
        Inherits Attribute
    End Class

    '''<summary>Атрибут применяется к свойству, для указания названия столбца в таблице</summary>
    <AttributeUsage(AttributeTargets.Property)>
    Public Class ColumnAttribute
        Inherits Attribute
        Public Property Name As String = String.Empty

        Protected Sub New()
        End Sub

        Public Sub New(ByVal Name As String)
            Me.Name = Name
        End Sub
    End Class

    '''<summary>Атрибут применяется к свойству, для переопределения типа столбца</summary>
    <AttributeUsage(AttributeTargets.Property)>
    Public Class StorageAttribute
        Inherits Attribute
        Public Property ColumnType As StorageClass = StorageClass.Auto

        Protected Sub New()
        End Sub

        Public Sub New(ByVal ColumnType As StorageClass)
            Me.ColumnType = ColumnType
        End Sub
    End Class

#End Region

End Namespace
